正文
接續昨天,今天要來記錄與mutate()搭配的向量化函式(Vectorized Function):
lag():找出在向量的前一個數值
lead():找出在向量的後一個數值
先隨機生成2000年到2005的數值
scrambled <- slice_sample(
tibble(year = 2000:2005, value = (0:5) ^ 2),
prop = 1
)
現在我想得出前一年的資料,該怎麼做呢?
先來個錯誤示範:
使用lag()去找出前一年的資料後,將結果以年份排列,會發現內容完全錯誤。
wrong <- mutate(scrambled, previous_year_value = lag(value))
arrange(wrong, year)
這是因為一開始的資料內容,年份的順序是雜亂的,導致lag()的取值會不符合需求,因此在使用lag()時針對年份排列。
right <- mutate(scrambled, previous_year_value = lag(value, order_by = year))
arrange(right, year)
要取下一年分的值就改用lead()~
right <- mutate(scrambled, next_year_value = lead(value, order_by = year))
arrange(right, year)
今天的小筆記就先到這邊,大家明天見~~
參考資料:
應該是 window function 才對
至於實作有沒有滿足向量化,可能得看文件或是原始碼了
But,
dplyr 應該大多有向量化。(用c/c++實作)
如果沒有,那請考慮 data.table